其他
性能优化技巧:小事实表与大维表关联
1. Oracle测试
select /*+ parallel(n) */
a1.state,
a2.state,
sum(amount) as amount
from
account a1,
account a2,
trade1
where
outid = a1.accountid
and receiveid = a2.accountid
group by
a1.state,
a2.state
order by
a1.state,
a2.state;
其中/*+ parallel(n) */ 用于并行测试,n为并行数。
2. SPL测试
A | |
1 | =now() |
2 | =file(path+"account.ctx").open() |
3 | =file(path+"trade1.ctx").open().cursor@m(outid,receiveid,amount;;1) |
4 | =A3.joinx@q(outid,A2:accountid,state:out_state;receiveid,A2:accountid,state:receive_state;5000000) |
5 | =A4.groups(out_state,receive_state;sum(amount):amount) |
6 | =interval@s(A1,now()) |
joinx时加选项@q就适用于事实表很小、维表很大时来提高关联性能,它的最后一个参数指明每次关联时从游标中读取的记录数,在内存能装下的情况下,此值越大性能越高。
3. 测试结果
事实表过滤后记录数 | 1500万 | 300万 | 30万 |
Oracle | 17277 | 2747 | 421 |
SPL | 517 | 106 | 72 |
用trade2(300万行)测试并行的结果如下(单位:秒):
并行数 | 1 | 2 | 4 | 8 | 16 |
Oracle | 2747 | 1589 | 1318 | 1375 | 1631 |
SPL | 106 | 109 | 117 | 115 | 109 |
重磅!开源SPL交流群成立了
简单好用的SPL开源啦!
为了给感兴趣的小伙伴们提供一个相互交流的平台,
特地开通了交流群(群完全免费,不广告不卖课)
需要进群的朋友,可长按扫描下方二维码
本文感兴趣的朋友,请转到阅读原文去收藏 ^_^